#ifndef __M_CL_H__
#define __M_CL_H__
#include "logger.hpp"

namespace cl {
    // 获取指定日志名称的日志器
    Logger::ptr getLogger(const std::string &name) {
        return LoggerManager::getInstance().getLogger(name);
    }

    // 获取根日志器
    Logger::ptr rootLogger() {
        return LoggerManager::getInstance().rootLogger();
    }

    // 以下是日志宏定义，用于简化记录时的代码书写
    #define debug(fmt, ...) debug(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    #define info(fmt, ...) info(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    #define warn(fmt, ...) warn(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    #define error(fmt, ...) error(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    #define fatal(fmt, ...) fatal(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    
    // 以下是针对特定日志器的日志宏定义
    #define LOG_DEBUG(fmt, ...) rootLogger()->debug(fmt, ##__VA_ARGS__)
    #define LOG_INFO(fmt, ...) rootLogger()->info(fmt, ##__VA_ARGS__)
    #define LOG_WARN(fmt, ...) rootLogger()->warn(fmt, ##__VA_ARGS__)
    #define LOG_ERROR(fmt, ...) rootLogger()->error(fmt, ##__VA_ARGS__)
    #define LOG_FATAL(fmt, ...) rootLogger()->fatal(fmt, ##__VA_ARGS__)
}
#endif